package telas.cliente;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.table.TableRowSorter;
import javax.swing.text.Document;
import javax.swing.text.MaskFormatter;
import javax.swing.JTabbedPane;
import javax.swing.JLabel;
import java.awt.Font;

import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.JTextArea;
import javax.swing.JButton;
import java.awt.SystemColor;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.ActionMap;
import javax.swing.InputMap;
import javax.swing.JComponent;
import javax.swing.JFormattedTextField;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JComboBox;
import javax.swing.JSeparator;
import javax.swing.ImageIcon;
import javax.swing.KeyStroke;

import controle.cliente.ControleCliente;
import controle.cliente.ControleClienteSwing;
import controle.produto.ControleProduto;
import controle.produto.ControleProdutoSwing;

import telas.produto.ProdutoTableModel;
import telas.sistema.ListenerJTextField;

import modelo.cliente.Cliente;


public class TelaCliente extends JFrame {

	private JPanel contentPane;
	private JTextField tfNome;
	
	private JTextField tfDataCadastro;    
	private JTextField tfCpf;    
	private JTextField tfRg;    
	private JTextField tfCnpj;
	private JTextField tfTelefoneFixo;
	private JTextField tfTelefoneCelular;
	private JTextField tfEmail;
	private JTextField tfBusca;
	private JTextField tfCidade;
	private JTextField tfNomeFantasia;
	private JComboBox<String> cbEstado;
	private JButton btnExcluirCliente;
	private JButton btnEditarCliente;
	private JButton btnBuscar;
	private JButton btnLimparDados;
	private JButton btnSalvar;	
	private JButton btnLimparBusca;
	private JButton btnEfetuarVenda;
	private JTextArea taObservacoes;
	private JTable table;
	private ClienteTableModel model;
	private TableRowSorter<ClienteTableModel> sorter;
	private JTabbedPane tabbedPane;
	
	private JPanel pnlCadastraCliente;
	private JPanel pnlListarCliente;
	
	private boolean novoCliente = true;
	private Cliente clienteSelecionado;
	
	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					TelaCliente frame = new TelaCliente();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public TelaCliente() {
		super("Cliente");
		setResizable(false);
		setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		setSize (800, 600);
		setVisible(true);
		setLocationRelativeTo(null);

		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);

		tabbedPane = new JTabbedPane(JTabbedPane.TOP);
		tabbedPane.setBounds(0, 122, 794, 450);
		tabbedPane.addChangeListener(new ControleClienteSwing(this, new ControleCliente()));
		contentPane.add(tabbedPane);

		pnlCadastraCliente = new JPanel();
		pnlCadastraCliente.setBackground(SystemColor.controlHighlight);
		tabbedPane.addTab("Cadastar Cliente", null, pnlCadastraCliente, null);
		pnlCadastraCliente.setLayout(null);

		JLabel lblCadastrarCliente = new JLabel("Cadastrar Dados do Cliente");
		lblCadastrarCliente.setFont(new Font("Tahoma", Font.BOLD, 18));
		lblCadastrarCliente.setBounds(10, 11, 352, 19);
		pnlCadastraCliente.add(lblCadastrarCliente);

		JLabel lblNome = new JLabel("Nome");
		lblNome.setFont(new Font("Tahoma", Font.PLAIN, 12));
		lblNome.setBounds(10, 41, 51, 15);
		pnlCadastraCliente.add(lblNome);
		InputMap imap = pnlCadastraCliente.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT); 

		imap.put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0, true), "panel.save");


		// associate the names with actions

		ActionMap amap = pnlCadastraCliente.getActionMap();
		amap.put("panel.save", new ControleClienteSwing(this, new ControleCliente(), "save"));
		tfNome = new JTextField();
		tfNome.setColumns(10);
		tfNome.setBounds(10, 55, 474, 20);
		pnlCadastraCliente.add(tfNome);

		JLabel lblCpf = new JLabel("CPF");
		lblCpf.setFont(new Font("Tahoma", Font.PLAIN, 12));
		lblCpf.setBounds(496, 41, 51, 15);
		pnlCadastraCliente.add(lblCpf);

		tfCpf = new JTextField();  
		tfCpf.setColumns(10);
		tfCpf.setBounds(496, 55, 142, 20);
		pnlCadastraCliente.add(tfCpf);
		
		JLabel lblDataDeCadastro = new JLabel("Data de Cadastro");
		lblDataDeCadastro.setFont(new Font("Tahoma", Font.PLAIN, 12));
		lblDataDeCadastro.setBounds(650, 86, 109, 15);
		pnlCadastraCliente.add(lblDataDeCadastro);

		tfDataCadastro = new JTextField(); 
		tfDataCadastro.setColumns(10);
		tfDataCadastro.setBounds(650, 100, 127, 20);
		pnlCadastraCliente.add(tfDataCadastro);

		JLabel lblTelefoneFixo = new JLabel("Telefone Fixo");
		lblTelefoneFixo.setFont(new Font("Tahoma", Font.PLAIN, 12));
		lblTelefoneFixo.setBounds(10, 130, 74, 15);
		pnlCadastraCliente.add(lblTelefoneFixo);

		tfTelefoneFixo = new JTextField();  
		tfTelefoneFixo.setColumns(10);
		tfTelefoneFixo.setBounds(10, 144, 110, 20);
		pnlCadastraCliente.add(tfTelefoneFixo);

		JLabel lblTelefoneCelular = new JLabel("Telefone Celular");
		lblTelefoneCelular.setFont(new Font("Tahoma", Font.PLAIN, 12));
		lblTelefoneCelular.setBounds(130, 130, 93, 15);
		pnlCadastraCliente.add(lblTelefoneCelular);

		tfTelefoneCelular = new JTextField(); 
		tfTelefoneCelular.setColumns(10);
		tfTelefoneCelular.setBounds(130, 144, 110, 20);
		pnlCadastraCliente.add(tfTelefoneCelular);

		JLabel lblEmail = new JLabel("E-mail");
		lblEmail.setFont(new Font("Tahoma", Font.PLAIN, 12));
		lblEmail.setBounds(250, 130, 42, 15);
		pnlCadastraCliente.add(lblEmail);

		tfEmail = new JTextField();
		tfEmail.setColumns(10);
		tfEmail.setBounds(250, 144, 234, 20);
		pnlCadastraCliente.add(tfEmail);

		JLabel lblObservaes = new JLabel("Observa\u00E7\u00F5es");
		lblObservaes.setFont(new Font("Tahoma", Font.PLAIN, 12));
		lblObservaes.setBounds(10, 200, 74, 15);
		pnlCadastraCliente.add(lblObservaes);

		taObservacoes = new JTextArea();
		taObservacoes.setLineWrap(true);
		taObservacoes.setBackground(SystemColor.info);
		taObservacoes.setBounds(10, 216, 767, 159);
		pnlCadastraCliente.add(taObservacoes);

		btnSalvar = new JButton("Salvar Dados");
		btnSalvar.setIcon(new ImageIcon(TelaCliente.class.getResource("/telas/sistema/figuras/disk.png")));
		btnSalvar.setBounds(10, 387, 145, 23);
		btnSalvar.addActionListener(new ControleClienteSwing(this, new ControleCliente()));
		pnlCadastraCliente.add(btnSalvar);

		JButton btnLimparDados = new JButton("Limpar Dados");
		btnLimparDados.setIcon(new ImageIcon(TelaCliente.class.getResource("/telas/sistema/figuras/bullet_page_white.png")));
		btnLimparDados.setBounds(167, 387, 145, 23);
		pnlCadastraCliente.add(btnLimparDados);

		tfRg = new JTextField(); 
		tfRg.setColumns(10);
		tfRg.setBounds(650, 55, 127, 20);
		pnlCadastraCliente.add(tfRg);

		JLabel lblRg = new JLabel("RG");
		lblRg.setFont(new Font("Tahoma", Font.PLAIN, 12));
		lblRg.setBounds(650, 41, 51, 15);
		pnlCadastraCliente.add(lblRg);

		JLabel lblEstado = new JLabel("Estado");
		lblEstado.setFont(new Font("Tahoma", Font.PLAIN, 12));
		lblEstado.setBounds(10, 86, 51, 15);
		pnlCadastraCliente.add(lblEstado);

		cbEstado = new JComboBox();
		cbEstado.setBounds(10, 99, 110, 20);
		pnlCadastraCliente.add(cbEstado);

		JLabel lblCidade = new JLabel("Cidade");
		lblCidade.setFont(new Font("Tahoma", Font.PLAIN, 12));
		lblCidade.setBounds(130, 87, 51, 15);
		pnlCadastraCliente.add(lblCidade);

		tfCidade = new JTextField();
		tfCidade.setColumns(10);
		tfCidade.setBounds(130, 101, 354, 20);
		pnlCadastraCliente.add(tfCidade);

		JLabel lblCnpj = new JLabel("CNPJ");
		lblCnpj.setFont(new Font("Tahoma", Font.PLAIN, 12));
		lblCnpj.setBounds(494, 86, 51, 15);
		pnlCadastraCliente.add(lblCnpj);
	
		JLabel lblNomeFantasia = new JLabel("Nome Fantasia");
		lblNomeFantasia.setFont(new Font("Tahoma", Font.PLAIN, 12));
		lblNomeFantasia.setBounds(496, 130, 229, 15);
		pnlCadastraCliente.add(lblNomeFantasia);

		tfNomeFantasia = new JTextField();
		tfNomeFantasia.setColumns(10);
		tfNomeFantasia.setBounds(496, 144, 281, 20);
		pnlCadastraCliente.add(tfNomeFantasia);

		JSeparator separator = new JSeparator();
		separator.setBounds(10, 187, 767, 2);
		pnlCadastraCliente.add(separator);

		JScrollPane scrollPane_1 = new JScrollPane();
		scrollPane_1.setBounds(82, 240, 3, 3);
		pnlCadastraCliente.add(scrollPane_1);
		
		tfCnpj = new JFormattedTextField(); 
		tfCnpj.setBounds(496, 100, 142, 20);
		pnlCadastraCliente.add(tfCnpj);
		tfCnpj.setColumns(10);

		pnlListarCliente = new JPanel();
		pnlListarCliente.setBackground(SystemColor.controlHighlight);
		tabbedPane.addTab("Listar Clientes", null, pnlListarCliente, null);
		pnlListarCliente.setLayout(null);

		JLabel lblListarClientesCadastrados = new JLabel("Listar Clientes Cadastrados");
		lblListarClientesCadastrados.setFont(new Font("Tahoma", Font.BOLD, 18));
		lblListarClientesCadastrados.setBounds(10, 11, 297, 19);
		pnlListarCliente.add(lblListarClientesCadastrados);

		JLabel lblNomeDoCliente = new JLabel("Nome do Cliente");
		lblNomeDoCliente.setFont(new Font("Tahoma", Font.PLAIN, 12));
		lblNomeDoCliente.setBounds(10, 41, 104, 14);
		pnlListarCliente.add(lblNomeDoCliente);

		tfBusca = new JTextField();
		tfBusca.setColumns(10);
		tfBusca.setBounds(10, 55, 453, 20);

		tfBusca.getDocument().addDocumentListener(new ControleClienteSwing(this, new ControleCliente()));

		pnlListarCliente.add(tfBusca);

		JButton btnBuscar = new JButton("    Buscar");
		btnBuscar.setIcon(new ImageIcon(TelaCliente.class.getResource("/telas/sistema/figuras/zoom.png")));
		btnBuscar.setBounds(475, 54, 145, 23);
		pnlListarCliente.add(btnBuscar);

		JButton btnLimparBusca = new JButton("Limpar Busca");
		btnLimparBusca.setIcon(new ImageIcon(TelaCliente.class.getResource("/telas/sistema/figuras/bullet_page_white.png")));
		btnLimparBusca.setBounds(632, 54, 145, 23);
		pnlListarCliente.add(btnLimparBusca);

		JScrollPane scrollPane = new JScrollPane();
		scrollPane.setBounds(10, 86, 767, 287);
		pnlListarCliente.add(scrollPane);
		model = new ClienteTableModel();
		table = new JTable(model);
		table.setBackground(SystemColor.info);
		sorter = new TableRowSorter<ClienteTableModel>(model);
		table.setRowSorter(sorter);
		table.addKeyListener(new ControleClienteSwing(this, new ControleCliente()));
		scrollPane.setViewportView(table);

		JButton btnEfetuarVenda = new JButton("Efetuar Venda");
		btnEfetuarVenda.setFont(new Font("Tahoma", Font.BOLD, 12));
		btnEfetuarVenda.setBounds(639, 479, 120, 23);
		pnlListarCliente.add(btnEfetuarVenda);

		btnEditarCliente = new JButton("  Editar Cliente");
		btnEditarCliente.setIcon(new ImageIcon(TelaCliente.class.getResource("/telas/sistema/figuras/page_edit.png")));
		btnEditarCliente.setBounds(10, 384, 145, 23);
		btnEditarCliente.addActionListener(new ControleClienteSwing(this, new ControleCliente()));
		pnlListarCliente.add(btnEditarCliente);

		btnExcluirCliente = new JButton("Excluir Cliente");
		btnExcluirCliente.setIcon(new ImageIcon(TelaCliente.class.getResource("/telas/sistema/figuras/bullet_cross.png")));
		btnExcluirCliente.setBounds(165, 384, 145, 23);
		btnExcluirCliente.addActionListener(new ControleClienteSwing(this, new ControleCliente()));
		pnlListarCliente.add(btnExcluirCliente);

		JLabel logo = new JLabel("");
		logo.setIcon(new ImageIcon(TelaCliente.class.getResource("/telas/sistema/figuras/logo.com.fundo.png")));
		logo.setBounds(0, 0, 794, 144);
		contentPane.add(logo);
	}

	public JTextField getTfCnpj() {
		return tfCnpj;
	}

	public JTextField getTfNome() {
		return tfNome;
	}

	public void setTfNome(JTextField tfNome) {
		this.tfNome = tfNome;
	}

	public JTextField getTfCpf() {
		return tfCpf;
	}

	public void setTfCpf(JFormattedTextField tfCpf) {
		this.tfCpf = tfCpf;
	}

	public JTextField getTfDataCadastro() {
		return tfDataCadastro;
	}

	public void setTfDataCadastro(JFormattedTextField tfDataCadastro) {
		this.tfDataCadastro = tfDataCadastro;
	}

	public JTextField getTfTelefoneFixo() {
		return tfTelefoneFixo;
	}

	public JTextField getTfTelefoneCelular() {
		return tfTelefoneCelular;
	}

	public JTextField getTfEmail() {
		return tfEmail;
	}

	public void setTfEmail(JTextField tfEmail) {
		this.tfEmail = tfEmail;
	}

	public JTextField getTfNomeCliente() {
		return tfBusca;
	}

	public void setTfNomeCliente(JTextField tfNomeCliente) {
		this.tfBusca = tfNomeCliente;
	}

	public JTextField getTfRg() {
		return tfRg;
	}

	public void setTfRg(JFormattedTextField tfRg) {
		this.tfRg = tfRg;
	}

	public JTextField getTfCidade() {
		return tfCidade;
	}

	public void setTfCidade(JTextField tfCidade) {
		this.tfCidade = tfCidade;
	}

	public JTextField getTfNomeFantasia() {
		return tfNomeFantasia;
	}

	public void setTfNomeFantasia(JTextField tfNomeFantasia) {
		this.tfNomeFantasia = tfNomeFantasia;
	}

	public JButton getBtnExcluirCliente() {
		return btnExcluirCliente;
	}

	public void setBtnExcluirCliente(JButton btnExcluirCliente) {
		this.btnExcluirCliente = btnExcluirCliente;
	}
	public JButton getBtnBuscar() {
		return btnBuscar;
	}

	public void setBtnBuscar(JButton btnBuscar) {
		this.btnBuscar = btnBuscar;
	}

	public JButton getBtnLimparDados() {
		return btnLimparDados;
	}

	public void setBtnLimparDados(JButton btnLimparDados) {
		this.btnLimparDados = btnLimparDados;
	}

	public JButton getBtnSalvar() {
		return btnSalvar;
	}


	public JButton getBtnLimparBusca() {
		return btnLimparBusca;
	}

	public void setBtnLimparBusca(JButton btnLimparBusca) {
		this.btnLimparBusca = btnLimparBusca;
	}

	public JButton getBtnEfetuarVenda() {
		return btnEfetuarVenda;
	}

	public void setBtnEfetuarVenda(JButton btnEfetuarVenda) {
		this.btnEfetuarVenda = btnEfetuarVenda;
	}

	public JPanel getPnlCadastrarEditarCliente() {
		return pnlCadastraCliente;
	}

	public JPanel getPnlListarCliente() {
		return this.pnlListarCliente;
	}

	public JTabbedPane getTabbedPane() {
		return tabbedPane;
	}

	public ClienteTableModel getModel() {
		return model;
	}

	public boolean isNovoCliente() {
		return novoCliente;
	}

	public void setNovoCliente(boolean novoCliente) {
		this.novoCliente = novoCliente;
	}

	public JComboBox<String> getCbEstado() {
		return cbEstado;
	}

	public JTextArea getTaObservacoes() {
		return taObservacoes;
	}

	public Cliente getClienteSelecionado() {
		return clienteSelecionado;
	}

	public void setClienteSelecionado(Cliente cliente) {
		this.clienteSelecionado = cliente;
		
		tfCpf.setText(cliente.getCpf());
		tfEmail.setText(cliente.getEmail());
		tfCidade.setText(cliente.getEndereco().getCidade());
		cbEstado.setSelectedItem(cliente.getEndereco().getEstado());
		tfNome.setText(cliente.getNome());
		tfNomeFantasia.setText(cliente.getNomeFantasia());
		taObservacoes.setText(cliente.getObservacoes());
		tfRg.setText(cliente.getRg());
		tfTelefoneCelular.setText(cliente.getTelefoneCelular());
		tfTelefoneFixo.setText(cliente.getTelefoneFixo());



	}
	public JTable getTable() {
		return table;
	}

	public void resetTela() {
		tfCpf.setText("");
		tfEmail.setText("");
		tfCidade.setText("");
//		cbEstado.setSelectedIndex(0);
		tfNome.setText("");
		tfNomeFantasia.setText("");
		taObservacoes.setText("");
		tfRg.setText("");
		tfTelefoneCelular.setText("");
		tfTelefoneFixo.setText("");

	}

	public JTextField getTfBusca() {
		return tfBusca;
	}

	public TableRowSorter<ClienteTableModel> getSorter() {
		return sorter;
	}

	public JButton getBtnEditarCliente() {
		return btnEditarCliente;
	}
}
